home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / choices / chcssml1.lha / Process.h < prev    next >
C/C++ Source or Header  |  1989-02-06  |  3KB  |  107 lines

  1. /*
  2.  * This file is part of the Choices Operating System Simulator
  3.  * Developed by: The TAPESTRY Parallel Computing Laboratory
  4.  *         University of Illinois at Urbana-Champaign
  5.  *         Department of Computer Science
  6.  *         1304 W. Springfield Ave.
  7.  *         Urbana, IL    61801
  8.  *
  9.  * Copyright (c) 1987, 1988, 1989 The University of Illinois Board of Trustees.
  10.  *    All Rights Reserved.
  11.  * CONFIDENTIAL INFORMATION. Distribution restricted under license agreement.
  12.  *
  13.  * Author: Gary M. Johnston (johnston@cs.uiuc.edu)
  14.  * Project Manager and Principal Investigator: Roy Campbell (roy@cs.uiuc.edu)
  15.  *
  16.  * Funded by: NSF TAPESTRY Grant No. 1-5-30035, NASA ICLASS Grant 
  17.  *   No. 1-5-25469 and No. NSG1471 and AT&T Metronet Grant No. 1-5-37411.
  18.  */
  19. /*
  20.  * Process.h - Declarations of classes ProcessTask, ProcessStatistics,
  21.  *           Process, and IdleProcess.
  22.  *
  23.  *    $Header: Process.h,v 1.4 88/02/18 16:09:40 johnston Exp $
  24.  *    $Locker: johnston $
  25.  */
  26.  
  27. #ifndef PROCESS_H
  28. #define PROCESS_H
  29.  
  30. #include <task.h>
  31. #include "Object.h"
  32.  
  33. const int RunToCompletion = -1;
  34.  
  35. class CPUManager;
  36. class CPU;
  37. class Process;
  38.  
  39. typedef int (* ProcessEntry)(void *);
  40.  
  41. class ProcessTask : public task {
  42.     Process * process;
  43.     int preemptable;
  44. public:
  45.     ProcessTask( Process * process, ProcessEntry entry, void * argp,
  46.              int preemptable, char * procName );
  47.     char * getName();
  48.  
  49.     Process * getProcess()
  50.         { return (process); }
  51.  
  52.     int isPreemptable();
  53.     int setPreemptable( int flag );
  54. };
  55.  
  56. class ProcessStatistics {
  57.     friend class Process;
  58.  
  59.     Process * process;    // Associated Process.
  60.     int runCount;        // Number of times we've been dispatched.
  61.     int runTime;        // Total run time.
  62.     int lastRun;        // Last time we were dispatched.
  63. public:
  64.     ProcessStatistics( Process * p );
  65.     void print();
  66. };
  67.  
  68. class Process : public Object {
  69.     friend class ProcessTask;
  70. protected:
  71.     ProcessTask * processTask;    // Task actually running.
  72.     ProcessStatistics * statistics; // Statistics for this Process.
  73.     CPU * cpu;            // Running on this CPU.
  74.     void * schedulerInfo;        // Maintained by scheduler.
  75.     int quantum;            // Time-slice quantum.
  76.     int residual;            // Time left if interrupted.
  77. public:
  78.     Process( ProcessEntry entry, void * argp,
  79.          int preemptable = 1, char * name = 0 );
  80.     ~Process();
  81.  
  82.     /*
  83.      * These should be used only by the CPU manager or a scheduler.
  84.      */
  85.     CPU * getCPU()
  86.         { return (cpu); }
  87.     void setQuantum( int quantum );
  88.     int getQuantum();        // RunToCompletion, 0, 1,...
  89.     void setResidual( int residual );
  90.     int getResidual();
  91.  
  92.     /*
  93.      * These should be used externally only by the CPU manager.
  94.      */
  95.     void stop();            // Stop a Process task.
  96.     void start(CPU * cpu);        // Start a Process task.
  97.     int getState();            // IDLE, RUNNING, or TERMINATED.
  98. };
  99.  
  100. class IdleProcess : public Process {
  101. public:
  102.     IdleProcess(CPU * cpu, char * name = 0 );
  103.     ~IdleProcess();
  104. };
  105.  
  106. #endif /* PROCESS_H */
  107.